package com.freewater.javabase.demo.network.tcp;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;

// 判断一个Socket是否已经链接：
public class SocketConnectStatus {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket();
            // 这里需要判断两个状态才能拿到socket真正的链接状态，原因：
            // 1、socket.isClose() 方法如果链接没有打开过，仍然会返回false（构造一个socket时内部closed字段默认就为false）；
            // 2、socket.isConnected() 方法如果曾经成功链接过服务器，就会返回true；（方法名字误导人）
            // 所有必须配合两个方法才能判断正确
            boolean connected = socket.isConnected() && !socket.isClosed();
            System.out.println(connected);
            socket.connect(new InetSocketAddress("www.baidu.com", 80));
            connected = socket.isConnected() && !socket.isClosed();
            System.out.println(connected);
            socket.close(); // 关闭链接，isClosed()方法会返回true
            connected = socket.isConnected() && !socket.isClosed();
            System.out.println(connected);
            System.out.println(socket.isConnected()); // 这里会输出true，因为曾经成功链接过服务器
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
